<?php

namespace IMT\EventBundle\Models;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Validator\Constraint;

interface EventManagerInterface
{
    /**
     * Créer une instance d'Event en fonction du type
     *
     * @return EventInterface
     */
    function createEvent();
    
   	/**
   	 * Hydrate l'event avec des données par défaut ou par une requête POST
     * (Attention à bien utiliser les ID fournis par la génération de forms)
     * 
   	 * @param EventInterface $event
   	 * @param Request $request
   	 * @return EventInterface $event
   	 */
    function hydrateEvent(EventInterface $event, Request $request);
    
    /**
     * Suppression d'un Event
     *
     * @param EventInterface $event
     */
    function deleteEvent(EventInterface $event);
    
    /**
     * Modification d'un Event
     *
     * @param EventInterface $event
     */
    function updateEvent(EventInterface $event);
    
    /**
     * Retourne la class de l'Event correspondant au type
     * 
     * @return string
     */
    public function getClass();
    
    /**
     * Recherche d'un event dans le repository
     *
     * @return string
     */
    public function findEventBy(array $criteria);
    
    /**
     * Retourne la configuration par defaut de l'eventManager
     *
     * @return array
     */
    public function getDefaultConfig();
    
}